home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Atari Mega Archive 1
/
Atari Mega Archive - Volume 1.iso
/
tex
/
td187src.lzh
/
MAGICSYS.D
< prev
next >
Wrap
Text File
|
1991-06-08
|
5KB
|
157 lines
(*######################################################################
MAGIC Modula's All purpose GEM Interface Cadre
¯ ¯ ¯ ¯ ¯
########################################################################
MagicSYS Ein Versuch, Compilerabhängige Dinge zu vereinheitlichen
########################################################################
V2.00 26.10.90 Peter Hellinger
Mit dem kommenden ISO-Standard werden auch Änderungen
betreffend der Größe der einzelnen Typen gültig werden.
Um diesen Umstand Rechung zu tragen, und vor allem
weil die verschiedenen Compiler auch unterschiedliche
Typen - und Größen - zur Verfügung stellen wurden für
MAGIC einheitliche Typen festgelegt.
V1.00 (C) by Peter Hellinger
######################################################################*)
DEFINITION MODULE MagicSys;
FROM SYSTEM IMPORT BYTE, WORD, ADDRESS, LONGWORD;
(* LPR/SPC: *) (* FROM SYSTEM IMPORT LONG; *)
(* eine besonders ärgerliche Sache: NIL ist nicht gleich NIL! Bei einigen
* Systemen ist NIL als -1, bei anderen als 0 implementiert.
* MagicSys exportiert deshalb eine Konstante "Nil", die den Wert LONG(-1)
* hat, und eine Konstante "Null", die gleich LONG(0) ist.
*
* Bitte informieren Sie sich, welche Lösung ihr System anbietet, bzw.
* auch, welche Prozeduren NIL und welche NULL liefern.
*)
CONST Nil = 0FFFFFFFFH;
Null = 000000000H;
(* Bits im Bitset für TDI, LPR, SPC und MM2 ab Version 4.05ß *)
CONST Bit0 = 0;
Bit1 = 1;
Bit2 = 2;
Bit3 = 3;
Bit4 = 4;
Bit5 = 5;
Bit6 = 6;
Bit7 = 7;
Bit8 = 8;
Bit9 = 9;
Bit10 = 10;
Bit11 = 11;
Bit12 = 12;
Bit13 = 13;
Bit14 = 14;
Bit15 = 15;
(* Bits im Bitset für MM2 vor Compilerversion 4.05ß *)
(*
CONST Bit0 = 8;
Bit1 = 9;
Bit2 = 10;
Bit3 = 11;
Bit4 = 12;
Bit5 = 13;
Bit6 = 14;
Bit7 = 15;
Bit8 = 0;
Bit9 = 1;
Bit10 = 2;
Bit11 = 3;
Bit12 = 4;
Bit13 = 5;
Bit14 = 6;
Bit15 = 7;
*)
(* Nach dem neuen ISO-Standard wird es einen neuen Typ Namens LOC geben, der
* die kleinste adressierbare Speichereinheit darstellt. Ein ARRAY OF WORD
* wird dann nach ISO ARRAY OF LOC heißen. Der ARRAY OF WORD beruht im übrigen
* auf einem Mißverständniss, da auf der Lilith (der Rechner, auf dem Wirth
* Modula-2 entwickelt hat) die kleinste adressierbare Einheit eben ein WORD ist.
* Bei den Rechnern der 68xxx Serie ist das aber anders. Deshalb ist die
* Entscheidung des ISO-Ausschusses durchaus vernünftig und gerechtfertigt.
*
* Mit Version 2.0 unterstützt auch MAGIC und alle davon abhängigen Bibliotheken
* dieses Konzept.
*)
TYPE LOC = BYTE; (* Kann entfernt werden, sobald Ihr Compiler den
* Typ LOC zur Verfügung stellt
*)
(* 8-Bit Typen *)
(* Es wird davon ausgegangen, daß ein CHAR auch nach ISO weiterhin 8 Bit
* groß ist, und somit keine Kompatibilitätsprobleme auftreten.
*)
TYPE Byte = BYTE;
ByteSet = SET OF [0..7];
(* 16-Bit Typen *)
TYPE sWORD = WORD;
sINTEGER = INTEGER;
sCARDINAL = CARDINAL;
sBITSET = BITSET;
(* 32-Bit Typen *)
(* Achtung, LONGWORD und LONGBITSET gibts auf manchen Systemen nicht! *)
TYPE lWORD = LONGWORD; (* ADDRESS ??? *)
lINTEGER = LONGINT;
lCARDINAL = LONGCARD;
lBITSET = SET OF [0..31];
(* Typ-Casting *)
PROCEDURE CastToChar (value: ARRAY OF LOC): CHAR;
PROCEDURE CastToByte (value: ARRAY OF LOC): Byte;
PROCEDURE CastToByteset (value: ARRAY OF LOC): ByteSet;
PROCEDURE CastToInt (value: ARRAY OF LOC): sINTEGER;
PROCEDURE CastToCard (value: ARRAY OF LOC): sCARDINAL;
PROCEDURE CastToBitset (value: ARRAY OF LOC): sBITSET;
PROCEDURE CastToWord (value: ARRAY OF LOC): sWORD;
PROCEDURE CastToLInt (value: ARRAY OF LOC): lINTEGER;
PROCEDURE CastToLCard (value: ARRAY OF LOC): lCARDINAL;
PROCEDURE CastToLBitset (value: ARRAY OF LOC): lBITSET;
PROCEDURE CastToLWord (value: ARRAY OF LOC): lWORD;
PROCEDURE CastToAddr (value: ARRAY OF LOC): ADDRESS;
(* Casten jeden beliebigen Typ auf den Ergebnistyp *)
PROCEDURE Basepage (): ADDRESS;
(* liefert die Adresse der Basepage *)
PROCEDURE Terminate (return: sINTEGER);
(* Bendet ein Programm *)
PROCEDURE CallGEM (function: sINTEGER; parablock: ADDRESS);
(* Ruft eine AES-Funktion auf *)
PROCEDURE VqGdos (): BOOLEAN;
(* Testet ob ein GDOS geladen ist *)
PROCEDURE CatchD0 (): LONGCARD;
(* Für einige VDI-Funktionen muß das D0-Register ausgewertet werden *)
END MagicSys.